package queue;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.SynchronousQueue;

/**
 * @author: 李德才
 * @description:
 * @create: 2020-12-13 20:34
 **/
public class Test_SynchronousQueue {

    public static void main(String[] args) throws InterruptedException {

        /**
         * SynchronousQueue 同步队列
         * 其容量为 0
         * 只有前面有人等着取值
         * 后面才可以存值
         * 这个值将直接交给取值的部分
         */
        BlockingQueue<String> synchronousQueue = new SynchronousQueue<>();

        new Thread(() -> {
            try {
                System.out.println(synchronousQueue.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
        /**
         * 这里将会阻塞住，等待消费者消费
         * 如果之前没有消费者等待消费，则会一直阻塞
         */
        synchronousQueue.put("aaa");
        /**
         * 消费者消费动作放在后面也是没有用的
         */
//        System.out.println(synchronousQueue.take());
        /**
         * 无论有没有消费者等待消费，使用 add 都会抛出异常
         */
//        synchronousQueue.add("aaa");
        System.out.println(synchronousQueue.size());
    }


}
